﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using System.Data;

namespace Web_Blog.Controler
{
    public class Notification
    {

        //Thêm thông báo
        public static int AddNotification(Object.NotifyObject n)
        {
            //Các trường cần thiết: SrcUID (người tạo), DesUID (người đc báo), pID (bài ảnh hưởng nếu có), type (loại)

            //Type: 1: like(ok) - 2: comment(ok) - 3: kết bạn(ok) - 4: gửi thư

            //Hành động like gồm có: pID, SrcUID (người like), type=1

            //Hành động comment gồm có: pID, SrcUID, type=2

            //Hành động kết bạn gồm có: SrcUID, DesUID, type=3

            //Hành động gửi thư gồm có: SrcUID, DesUID, type=4

            //Như vậy phải bắt buộc có 1 trong hai hoặc là pID ~> sẽ tìm ra DesUID hoặc là DesUID (không cần pID)

            //==================================================================

            //Kiểm tra trước xem có một trong hai không, nếu không đủ điều kiện thì thoát ra
            if (n.Desuid == 0 && n.Pid == 0)
                return -1;

            //Kiểm tra coi type có đúng chưa (từ 1 tới 4)
            if (n.Type == 0 || n.Type < 1 || n.Type > 4)
                return -1;

            //Nếu có pID thì sẽ đi tìm chủ của pID đó (desUID)
            if (n.Pid != 0)
                n.Desuid = Controler.POST.Load(n.Pid).UID;

            //Tới đây đã có DesUID
            //Kiểm tra nếu chính chủ thì thôi
            if (n.Srcuid == n.Desuid)
                return -1;

            //Bây giờ thêm thông báo vào DB
            ConnectDB.ConnectDB DB = new ConnectDB.ConnectDB();
            SqlConnection conn = DB.LayKetNoi();
            conn.Open();

            SqlCommand command = new SqlCommand("procThemThongBao", conn);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add(new SqlParameter("@uIDdid", n.Srcuid));
            command.Parameters.Add(new SqlParameter("@uIDhost", n.Desuid));
            command.Parameters.Add(new SqlParameter("@pID", n.Pid));
            command.Parameters.Add(new SqlParameter("@type", n.Type));

            int retval = command.ExecuteNonQuery();
            conn.Close();

            return retval;
        }

        //Load danh sách thông báo mới
        public static string LoadNotificationList(int uID)
        {
            string dsnotification = "";

            ConnectDB.ConnectDB DB = new ConnectDB.ConnectDB();
            SqlConnection conn = DB.LayKetNoi();
            conn.Open();

            SqlCommand command = new SqlCommand("procLayThongBao", conn);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add(new SqlParameter("@uIDhost", uID));

            SqlDataReader reader = null;

            reader = command.ExecuteReader();
            while (reader.Read())
            {
                int type = int.Parse(reader["type"].ToString());
                //Phân loại ra câu nói
                String action = "";

                switch (type)
                {
                    case 1:
                        action = " đã thích bài viết ";
                        break;
                    case 2:
                        action = " đã comment bài viết ";
                        break;
                    case 3:
                        action = " đã thêm bạn vào danh sách bạn bè ";
                        break;
                    case 4:
                        action = "Bạn có một tin nhắn mới từ ";
                        break;
                }

                //Có 3 loại câu
                // [người kia] đã làm gì [bài viêt] của bạn (1,2)
                // [người kia] đã thêm bạn vào danh sách bạn bè (3)
                // Bạn nhận được một tin nhắn mới từ [người kia] (4)

                string user = "";
                user = "<a href='./ThongBao.aspx?id=" + reader["id"].ToString() + "&url=TrangChu.aspx?u=" + reader["SrcUID"].ToString() + "' target='_blank'>";
                user += reader["name"].ToString();
                user += "</a>";

                if (type == 1 || type == 2)
                {
                    dsnotification += user;
                    dsnotification += action;
                    dsnotification += "<a href='./ThongBao.aspx?id=" + reader["id"].ToString() + "&url=BaiViet.aspx?p=" + reader["pID"].ToString() + "#newcomment' target='_blank'>";
                    dsnotification += Controler.POST.Load(int.Parse(reader["pID"].ToString())).Title;
                    dsnotification += "</a>";
                    dsnotification += " của bạn vào lúc ";
                }
                else
                    if (type == 3)
                    {
                        dsnotification += user;
                        dsnotification += action;
                        dsnotification += " vào lúc ";
                    }
                    else
                        if (type == 4)
                        {
                            dsnotification += action;
                            dsnotification += user;
                            dsnotification += " vào lúc ";
                        }
                dsnotification += reader["actiontime"].ToString();

                //Phân cách giữa các notification
                dsnotification += "<br/><br/><hr/><br/>";

            }
            conn.Close();
            return dsnotification;
        }

        //Xóa một thông báo
        public static int DeleteNotification(int id)
        {
            ConnectDB.ConnectDB DB = new ConnectDB.ConnectDB();
            SqlConnection conn = DB.LayKetNoi();
            conn.Open();

            SqlCommand command = new SqlCommand("procXoaThongBao", conn);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add(new SqlParameter("@id", id));

            int retval = command.ExecuteNonQuery();
            conn.Close();

            return retval;
        }

        //Xóa hêt thông báo
        public static int DeleteAllNotification(int uID)
        {
            ConnectDB.ConnectDB DB = new ConnectDB.ConnectDB();
            SqlConnection conn = DB.LayKetNoi();
            conn.Open();

            SqlCommand command = new SqlCommand("procXoaHetThongBao", conn);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add(new SqlParameter("@DesUID", uID));

            int retval = command.ExecuteNonQuery();
            conn.Close();

            return retval;
        }

        //Đếm thông báo
        public static int CountNotification(int uID)
        {
            ConnectDB.ConnectDB DB = new ConnectDB.ConnectDB();
            SqlConnection conn = DB.LayKetNoi();
            conn.Open();

            SqlCommand command = new SqlCommand("procDemThongBao", conn);
            command.CommandType = CommandType.StoredProcedure;

            command.Parameters.Add(new SqlParameter("@DesUID", uID));

            SqlDataReader reader = command.ExecuteReader();

            int retval = 0;

            if (reader.Read())
                retval = int.Parse(reader["dem"].ToString());

            conn.Close();

            return retval;
        }
    }
}